const fs = require('fs')
const fileName = './README.MD'
// 打开文件
fs.open(fileName, 'r', (err, fd) => {
    //文件描述符fd
})
const fd = fs.openSync(fileName, 'r')
// 文件属性
fs.stat(fileName, (err, stats) => {
    if (err) {
        console.error(err)
        return
    }
    //stats
})
const stats = fs.statSync(fileName)
console.log(`${fileName} is File\t:${stats.isFile()}`)
console.log(`${fileName} is Directory\t:${stats.isDirectory()}`)
console.log(`${fileName} is symbolic link\t:${stats.isSymbolicLink()}`)
console.log(`${fileName} is Size\t:${stats.size} byte`)
// 文件路径
const path = require('path')
let fPath = './001/../README.MD'
// 路径信息
console.log(`${fPath} 父文件夹:\t${path.dirname(fPath)}`)
console.log(`${fPath} 文件名  :\t${path.basename(fPath)}`)
console.log(`${fPath} 扩展名  :\t${path.extname(fPath)}`)
console.log(`${fPath} 是否绝对路径  :\t${path.isAbsolute(fPath)}`)
console.log(`${fPath} 解析路径片段  :\t${JSON.stringify(path.parse(fPath))}`)
console.log('路径拼接:\t' + path.join('/', 'user', fPath))
console.log('绝对路径:\t' + path.resolve(fPath))
console.log('实际路径:\t' + path.normalize(fPath))
// 读取文件
fs.readFile(fileName, 'utf8', (err, data) => {
    if (err) {
        console.error(err)
        return
    }
    console.log('--File Content---')
    console.log(data)
    console.log('--File Content---')
})
const data = fs.readFileSync(fileName, 'utf8')
console.log(data)
// fs.writeFile(fileName + 'x', 'write', err => { })
fs.writeFileSync(fileName + 'x', 'write', err => {
    if (err) {
        console.error(err)
        return
    }
    console.log("写入成功")
})
// fs.appendFile(fileName + 'x', 'append', err => {})
fs.appendFileSync(fileName + 'x', 'append', err => {
    if (err) {
        console.error(err)
        return
    }
    console.log("追加成功")
})
// 文件夹
const dir = './node_modules'
const dirx = dir + '_xxx'
console.log(`文件夹:${dir}是否存在&&可访问:\t${fs.access(dir,null,()=>{})}`)
console.log(`文件夹:${dir}是否存在:\t${fs.existsSync(dir)}`)
if (!fs.existsSync(dirx))
    fs.mkdirSync(dirx) //新建文件夹
//遍历文件夹内文件
console.log(fs.readdirSync(dir, 'utf8').map(fn => {
    return path.join(dir, fn)
}))
console.log(fs.readdirSync(dir, 'utf8').map(fn => {
    return path.join(dir, fn)
}).filter((fn) => {
    return fs.existsSync(fn) && fs.lstatSync(fn).isFile()
}))
//重命名文件夹
fs.renameSync(dirx, dirx + 'x')
// 删除文件夹
// fs.rmdir(dirx+'x',()=>{})
fs.rmdirSync(dirx + 'x')
const fs_ex = require('fs-extra')
fs_ex.remove(dirx + 'x', err = {})
fs_ex.remove(dirx + 'x')
    .then(() => {
        console.log('remove ok')
    })
    .catch((err) => {
        console.error(err)
    })